﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Project.Core;
using Microsoft.Xna.Framework.Graphics;

namespace TLS
{
    public class Boss1 : Enemigo
    {
        private Game1 game;
        private float fuerzaGravedad = 0.002f;

        public float velocidad { get; set; }

        public Animacion ACaminandoDerecha;
        public Animacion ACaminandoIzquierda;
        public Animacion AParadoDerecha;
        public Animacion AParadoIzquierda;
        public Animacion ASaltandoDerecha;
        public Animacion ASaltandoIzquierda;
        /*Ataque*/
        public Animacion AAtacandoDerecha;
        public Animacion AAtacandoIzquierda;

        public double ataqueBoss1;

        public double vida { get; set; }

        public enum Estados
        {
            CAMINANDO, SALTANDO, ATACANDO
        }
        public Estados Estado { get; set; }
        public enum Direcciones
        {
            IZQUIERDA, DERECHA
        }
        public Direcciones Direccion { get; set; }
        public Boss1(Game1 game)
            : base(null)
        {
            this.game = game;
            //Cargamos imagenes de Boss1 atacando a la izquierda
            Texture2D BossA_101i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l01");
            Texture2D BossA_102i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l02");
            Texture2D BossA_103i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l03");
            Texture2D BossA_104i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l04");
            Texture2D BossA_105i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l05");
            Texture2D BossA_106i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l06");
            Texture2D BossA_107i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l07");
            Texture2D BossA_108i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l08");
            Texture2D BossA_109i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l09");
            Texture2D BossA_110i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l10");
            Texture2D BossA_111i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l11");
            Texture2D BossA_112i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l12");
            Texture2D BossA_113i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l13");
            Texture2D BossA_114i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l14");
            Texture2D BossA_115i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l15");
            Texture2D BossA_116i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l16");
            Texture2D BossA_117i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l17");
            Texture2D BossA_118i = game.Content.Load<Texture2D>("Boss1/ataque/atacando_l18");


            AAtacandoIzquierda = new Animacion();
            AAtacandoIzquierda.agregarFrame(BossA_101i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_102i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_103i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_104i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_105i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_106i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_107i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_108i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_109i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_110i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_111i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_112i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_113i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_114i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_115i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_116i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_117i, 150);
            AAtacandoIzquierda.agregarFrame(BossA_118i, 150);

            //Cargamos imagenes de Boss1 atacando a la derecha
            Texture2D BossA_101d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r01");
            Texture2D BossA_102d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r02");
            Texture2D BossA_103d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r03");
            Texture2D BossA_104d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r04");
            Texture2D BossA_105d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r05");
            Texture2D BossA_106d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r06");
            Texture2D BossA_107d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r07");
            Texture2D BossA_108d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r08");
            Texture2D BossA_109d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r09");
            Texture2D BossA_110d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r10");
            Texture2D BossA_111d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r11");
            Texture2D BossA_112d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r12");
            Texture2D BossA_113d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r13");
            Texture2D BossA_114d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r14");
            Texture2D BossA_115d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r15");
            Texture2D BossA_116d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r16");
            Texture2D BossA_117d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r17");
            Texture2D BossA_118d = game.Content.Load<Texture2D>("Boss1/ataque/atacando_r18");


            AAtacandoDerecha = new Animacion();
            AAtacandoDerecha.agregarFrame(BossA_101d, 150);
            AAtacandoDerecha.agregarFrame(BossA_102d, 150);
            AAtacandoDerecha.agregarFrame(BossA_103d, 150);
            AAtacandoDerecha.agregarFrame(BossA_104d, 150);
            AAtacandoDerecha.agregarFrame(BossA_105d, 150);
            AAtacandoDerecha.agregarFrame(BossA_106d, 150);
            AAtacandoDerecha.agregarFrame(BossA_107d, 150);
            AAtacandoDerecha.agregarFrame(BossA_108d, 150);
            AAtacandoDerecha.agregarFrame(BossA_109d, 150);
            AAtacandoDerecha.agregarFrame(BossA_110d, 150);
            AAtacandoDerecha.agregarFrame(BossA_111d, 150);
            AAtacandoDerecha.agregarFrame(BossA_112d, 150);
            AAtacandoDerecha.agregarFrame(BossA_113d, 150);
            AAtacandoDerecha.agregarFrame(BossA_114d, 150);
            AAtacandoDerecha.agregarFrame(BossA_115d, 150);
            AAtacandoDerecha.agregarFrame(BossA_116d, 150);
            AAtacandoDerecha.agregarFrame(BossA_117d, 150);
            AAtacandoDerecha.agregarFrame(BossA_118d, 150);

            //Cargamos imagenes de Boss1 mirando a la izquierda
            Texture2D Boss101i = game.Content.Load<Texture2D>("Boss1/caminando_l01");
            Texture2D Boss102i = game.Content.Load<Texture2D>("Boss1/caminando_l02");
            Texture2D Boss103i = game.Content.Load<Texture2D>("Boss1/caminando_l03");
            Texture2D Boss104i = game.Content.Load<Texture2D>("Boss1/caminando_l04");
            Texture2D Boss105i = game.Content.Load<Texture2D>("Boss1/caminando_l05");
            Texture2D Boss106i = game.Content.Load<Texture2D>("Boss1/caminando_l06");
            Texture2D Boss107i = game.Content.Load<Texture2D>("Boss1/caminando_l07");
            Texture2D Boss108i = game.Content.Load<Texture2D>("Boss1/caminando_l08");
            Texture2D Boss109i = game.Content.Load<Texture2D>("Boss1/caminando_l09");
            Texture2D Boss110i = game.Content.Load<Texture2D>("Boss1/caminando_l10");
            Texture2D Boss111i = game.Content.Load<Texture2D>("Boss1/caminando_l11");
            Texture2D Boss112i = game.Content.Load<Texture2D>("Boss1/caminando_l12");
            Texture2D Boss113i = game.Content.Load<Texture2D>("Boss1/caminando_l13");
            Texture2D Boss114i = game.Content.Load<Texture2D>("Boss1/caminando_l14");



            //Cargamos imagenes de Boss1 mirando a la derecha
            Texture2D Boss101d = game.Content.Load<Texture2D>("Boss1/caminando_r01");
            Texture2D Boss102d = game.Content.Load<Texture2D>("Boss1/caminando_r02");
            Texture2D Boss103d = game.Content.Load<Texture2D>("Boss1/caminando_r03");
            Texture2D Boss104d = game.Content.Load<Texture2D>("Boss1/caminando_r04");
            Texture2D Boss105d = game.Content.Load<Texture2D>("Boss1/caminando_r05");
            Texture2D Boss106d = game.Content.Load<Texture2D>("Boss1/caminando_r06");
            Texture2D Boss107d = game.Content.Load<Texture2D>("Boss1/caminando_r07");
            Texture2D Boss108d = game.Content.Load<Texture2D>("Boss1/caminando_r08");
            Texture2D Boss109d = game.Content.Load<Texture2D>("Boss1/caminando_r09");
            Texture2D Boss110d = game.Content.Load<Texture2D>("Boss1/caminando_r10");
            Texture2D Boss111d = game.Content.Load<Texture2D>("Boss1/caminando_r11");
            Texture2D Boss112d = game.Content.Load<Texture2D>("Boss1/caminando_r12");
            Texture2D Boss113d = game.Content.Load<Texture2D>("Boss1/caminando_r13");
            Texture2D Boss114d = game.Content.Load<Texture2D>("Boss1/caminando_r14");


            //Animacion Boss1 caminando a la izquierda
            ACaminandoIzquierda = new Animacion();
            ACaminandoIzquierda.agregarFrame(Boss101i, 200);
            ACaminandoIzquierda.agregarFrame(Boss102i, 200);
            ACaminandoIzquierda.agregarFrame(Boss103i, 200);
            ACaminandoIzquierda.agregarFrame(Boss104i, 200);
            ACaminandoIzquierda.agregarFrame(Boss105i, 200);
            ACaminandoIzquierda.agregarFrame(Boss106i, 200);
            ACaminandoIzquierda.agregarFrame(Boss107i, 200);
            ACaminandoIzquierda.agregarFrame(Boss108i, 200);
            ACaminandoIzquierda.agregarFrame(Boss109i, 200);
            ACaminandoIzquierda.agregarFrame(Boss110i, 200);
            ACaminandoIzquierda.agregarFrame(Boss111i, 200);
            ACaminandoIzquierda.agregarFrame(Boss112i, 200);
            ACaminandoIzquierda.agregarFrame(Boss113i, 200);
            ACaminandoIzquierda.agregarFrame(Boss114i, 200);


            //Animacion Boss1 caminando a la derecha
            ACaminandoDerecha = new Animacion();
            ACaminandoDerecha.agregarFrame(Boss101d, 200);
            ACaminandoDerecha.agregarFrame(Boss102d, 200);
            ACaminandoDerecha.agregarFrame(Boss103d, 200);
            ACaminandoDerecha.agregarFrame(Boss104d, 200);
            ACaminandoDerecha.agregarFrame(Boss105d, 200);
            ACaminandoDerecha.agregarFrame(Boss106d, 200);
            ACaminandoDerecha.agregarFrame(Boss107d, 200);
            ACaminandoDerecha.agregarFrame(Boss108d, 200);
            ACaminandoDerecha.agregarFrame(Boss109d, 200);
            ACaminandoDerecha.agregarFrame(Boss110d, 200);
            ACaminandoDerecha.agregarFrame(Boss111d, 200);
            ACaminandoDerecha.agregarFrame(Boss112d, 200);
            ACaminandoDerecha.agregarFrame(Boss113d, 200);
            ACaminandoDerecha.agregarFrame(Boss114d, 200);


            base.animacion = ACaminandoIzquierda;
            this.Direccion = Direcciones.IZQUIERDA;
            this.Estado = Estados.CAMINANDO;
            ataqueBoss1 = 0.9;
            velocidad = 0.09f;
            velocidadX = -0.09f;
            vida = 1;
            //vida = 30;
        }

        public override void actualizar(long tiempo)
        {
            switch (Direccion)
            {
                case Direcciones.IZQUIERDA:
                    switch (Estado)
                    {
                        case Estados.CAMINANDO:
                            base.animacion = ACaminandoIzquierda;
                            break;
                        case Estados.ATACANDO:
                            base.animacion = AAtacandoIzquierda;
                            break;
                    }
                    break;
                case Direcciones.DERECHA:
                    switch (Estado)
                    {
                        case Estados.CAMINANDO:
                            base.animacion = ACaminandoDerecha;
                            break;
                        case Estados.ATACANDO:
                            base.animacion = AAtacandoDerecha;
                            break;
                    }
                    break;
            }

            base.actualizar(tiempo);
            //Gravedad
            velocidadY += fuerzaGravedad * tiempo;
        }

        public void saltar()
        {
            if (Estado != Estados.SALTANDO)
            {
                velocidadY -= 0.6f;
                Estado = Estados.SALTANDO;
            }
        }

        public void morir()
        {
            this.escenarioActual.sprites.Remove(this);
        }

        public override void evento_ColisionVerticalTile()
        {
            if (velocidadY >= 0 && Estado == Boss1.Estados.SALTANDO)
            {
                //Estado = Boss1.Estados.PARADO;
            }
            base.evento_ColisionVerticalTile();
        }

        public override void evento_ColisionHorizontalTile()
        {
            if (Direccion == Direcciones.DERECHA) Direccion = Direcciones.IZQUIERDA;
            else Direccion = Direcciones.DERECHA;
            velocidadX = -velocidadX;
        }

        public override void evento_ColisionHorizontalSprite(Sprite objSprite)
        {
            if (objSprite is Bloque)
            {
                if (Direccion == Direcciones.DERECHA) Direccion = Direcciones.IZQUIERDA;
                else Direccion = Direcciones.DERECHA;
                this.velocidadX = -velocidadX;
            }
            if (objSprite is Disparo)
            {
                if (this.game.objKaled.x <= this.x)
                {
                    if (this.Direccion != Direcciones.IZQUIERDA)
                    {
                        this.Direccion = Direcciones.IZQUIERDA;
                        this.Estado = Estados.ATACANDO;
                        this.velocidadX = -this.velocidadX;
                    }
                }
                else
                {
                    if (this.Direccion != Direcciones.DERECHA)
                    {
                        this.Direccion = Direcciones.DERECHA;
                        this.Estado = Estados.ATACANDO;
                        this.velocidadX = -this.velocidadX;
                    }
                }
            }
        }

        /************************/
        public void disparar()
        {

            Disparo_Boss1 nuevoDisparo = new Disparo_Boss1(this.game);
            nuevoDisparo.y = this.y;
            if (this.Direccion == Direcciones.DERECHA)
            {
                nuevoDisparo.x = this.x + this.animacion.obtenerImagen().Width + 30;
                nuevoDisparo.direccion = Disparo_Boss1.Direcciones.DERECHA;
            }
            else
            {
                nuevoDisparo.x = this.x - nuevoDisparo.animacion.obtenerImagen().Width - 30;
                nuevoDisparo.direccion = Disparo_Boss1.Direcciones.IZQUIERDA;
            }
            escenarioActual.sprites.Add(nuevoDisparo);

        }

    }
}
